package com.melo.graph;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * @author lichunlong lcl253137@alibaba-inc.com
 * @desc 图搜索类
 * @date 2025-04-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class FsGraph extends Graph {

    /**
     * 结点是否被访问过的数组
     */
    private boolean[] visitFlagArr;

    public FsGraph(int vertexNum) {
        super(vertexNum);
        visitFlagArr = new boolean[vertexNum];
    }

    /**
     * 根据当前顶点的下标, 得到第一个邻接结点的下标
     *
     * @param index 第一个结点的下标
     * @return 如果存在就返回对应的下标，否则返回-1
     */
    public int getFirstNeighbor(int index) {
        for (int j = 0; j < getVertexList().size(); j++) {
            if (getEdgeArr()[index][j] > 0) {
                return j;
            }
        }
        return -1;
    }

    /**
     * 根据当前顶点的下标来获取下一个邻接结点
     *
     * @param vertexX 前一个邻接结点的X下标
     * @param vertexY 前一个邻接结点的Y下标
     * @return 如果存在就返回对应的下标，否则返回-1
     */
    public int getNextNeighbor(int vertexX, int vertexY) {
        for (int j = vertexY + 1; j < getVertexList().size(); j++) {
            if (getEdgeArr()[vertexX][j] > 0) {
                return j;
            }
        }
        return -1;
    }
}
